﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text.RegularExpressions;

namespace CalculoPreciosUnitarios.Logica.GestorObject.Rubro
{
    public class RubroCS : INotifyPropertyChanged, IDataErrorInfo
    {
        
        #region Property

        public event PropertyChangedEventHandler PropertyChanged;
        private IFormatProvider argento = new System.Globalization.CultureInfo("es-AR");

        private string _idRubro;
        public string IdRubro
        {
            get
            {
                return this._idRubro;
            }
            set
            {
                if (this._idRubro == value)
                {
                    return;
                }
                this._idRubro = value;
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("IdRubro"));
            }
        }

        private string _descripcion;
        public string Descripcion
        {
            get
            {
                return this._descripcion;
            }
            set
            {
                if (this._descripcion == value)
                {
                    return;
                }
                this._descripcion = value;
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Descripcion"));
            }
        }

        private int _cantidadSubRubros;
        public int CantidadSubRubros
        {
            get
            {
                return _cantidadSubRubros;
            }
            set
            {
                if (_cantidadSubRubros == value)
                    return;
                _cantidadSubRubros = value;
            }
        }

        public string Error
        {
            get
            {
                return null;
            }
        }

        public string this[string propertyName]
        {
            get
            {
                return IsValid(propertyName);
            }
        }

        #endregion

        #region Contructor

        public RubroCS()
        {
            _idRubro = "";
            _descripcion = "";
            _cantidadSubRubros = 0;
        }

        #endregion

        #region Methods

        private string IsValid(string propertyName)
        {
            switch (propertyName)
            {
                case "IdRubro":
                    if (string.IsNullOrWhiteSpace(IdRubro))
                        return "El campo Codigo es requerido - ej: 0003";
                    else
                    {
                        Regex regEx;
                        regEx = new Regex(@"^\w{1,4}$");
                        if (!regEx.IsMatch(IdRubro))
                            return "El campo Codigo no " +
                                   "tiene un formato correcto \n ej:0003";
                    }
                    break;

                case "Descripcion":
                    if (string.IsNullOrWhiteSpace(Descripcion))
                        return "El campo Descripcion del Rubro es requerido";
                    break;
            }
            return null;
        }

        public bool IsValid()
        {
            return string.IsNullOrEmpty(IsValid("IdRubro"))
                && string.IsNullOrEmpty(IsValid("Descripcion"));
        }

        #endregion 
    }

    public class MyOrderingRubro : IComparer<RubroCS>
    {
        public int Compare(RubroCS x, RubroCS y)
        {
            int compareNro = x.IdRubro.CompareTo(y.IdRubro);

            return compareNro;
        }
    }
    
}
